/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Almacen;

import Controlador.Bean.Almacen.Almacen;
import Data.config.SessionFac;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
/**
 *
 * @author César
 */
public class ServicioAlmacen {
    
    public String buscarPorNombre(String nombre){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        String idAlm = sqlsession.selectOne("Data.Almacen.ServicioAlmacen.buscarPorNombre", nombre);
        sqlsession.close();
        return idAlm;
    }
    
    public void guardar(Almacen almacen){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        almacen.setIdAlmacen(obtenerIdSiguiente(sqlsession));
        sqlsession.insert("Data.Almacen.ServicioAlmacen.guardar", almacen);
        sqlsession.commit();
        sqlsession.close();
    }
    
    public List<Almacen> filtrarAlmacen(String id, String nombre, String ubicacion){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        HashMap<String,String> hm = new HashMap<>();
        
        hm.put("id", "%"+id.toUpperCase()+"%");
        hm.put("nombre", "%"+nombre.toUpperCase()+"%");
        hm.put("ubicacion", "%"+ubicacion.toUpperCase()+"%");        
        List<Almacen> almacen = (List)sqlsession.selectList("Data.Almacen.ServicioAlmacen.filtrarAlmacen", hm);
        sqlsession.close();
        return almacen;
    }
    
    public void actualizar(Almacen almacen){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.insert("Data.Almacen.ServicioAlmacen.actualizar", almacen);
        sqlsession.commit();
        sqlsession.close();
    }
    
    public void eliminar(String id){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.selectOne("Data.Almacen.ServicioAlmacen.eliminar", id);
        sqlsession.close();
    }
    
    public Almacen buscarAlmacenId(String id){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        Almacen almacen = (Almacen)sqlsession.selectOne("Data.Almacen.ServicioAlmacen.buscarId", id);
        sqlsession.close();
        return almacen;
    }
    
    public synchronized String obtenerIdSiguiente(SqlSession sqlSession){
        HashMap<String,Long> hm = (HashMap<String,Long>)sqlSession.selectOne("Data.Almacen.ServicioAlmacen.seleccionarMaxId");
        Long maxId = hm!=null?hm.get("idalmacen"):Long.parseLong("0");
        maxId++;
        int cifras = ((int)(Math.log10(maxId)));
        String codigo = "";
        for(int i=0; i<(5-cifras); i++){
            codigo = codigo + "0";
        }
        codigo = codigo + maxId;
        return ("ALM"+codigo);
    }
    
    public List<Almacen> seleccionarTodo(){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        List<Almacen> data = (List)sqlsession.selectList("Data.Almacen.ServicioAlmacen.seleccionarTodo");
        sqlsession.close();
        return data;
    }
    
    public List<Almacen> seleccionarAlmacenPT(){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        List<Almacen> data = (List)sqlsession.selectList("Data.Almacen.ServicioAlmacen.seleccionarAlmacenPT");
        sqlsession.close();
        return data;
    }
}
